rolling qmk caps

tuesday, 25 june 2019

the original implementation of rolling QMK modifiers only allowed proper case words with leading capitalization during rapid finger rolls. While not a huge imposition—all caps can be typed by respecting the TAPPING_TERM setting or enabling the CapsLock—it is possible to implement rolling capitalization with a minor change to the mod_roll function by checking the shift state of columns 3 (A) and 6 (T)..

#define ROLL(s, k) ((s == LEFT) && e[6].shift) || ((s == RIGHT) && e[3].shift) ? tap_shift(k) : tap_key(k) void mod_roll(keyrecord_t *record, uint8_t side, uint8_t shift, uint16_t modifier, uint16_t keycode, uint8_t column) { if (KEY_DOWN) { e[column].key_timer = timer_read(); e[column].keycode = keycode; e[column].shift = shift; e[column].side = side; prev_key = next_key; next_key = column; if (modifier) { register_modifier(modifier); } } else { if (modifier) { unregister_modifier(modifier); } if (timer_elapsed(e[column].key_timer) < TAPPING_TERM) { if (e[column].key_timer < e[next_key].key_timer) { mod_all(unregister_code, 0); if (e[column].shift && (e[column].side != e[next_key].side)) { tap_shift(e[next_key].keycode); e[next_key].key_timer = 0; } else { ROLL(side, keycode); } // check shift } else { ROLL(side, keycode); e[prev_key].key_timer = 0; } // check shift } e[column].key_timer = 0; e[column].shift = 0; // clear shift state } }

»»  planck zi

comment ?